#ifndef JOBS_H
#define JOBS_H

#include "Common.h"

typedef struct {
    int clntSocket;
} QueryStatusArgs; 

typedef struct {
    int clntSocket;
} ReplyStatusArgs; 

typedef struct {
    int clntSocket;
} NakArgs;  

typedef struct {
    string fileName;
    int tag;
    int revision;
} FileACKArgs; 

typedef struct {
    int clntSocket;
    string message;
} ReplyVFSArgs;

typedef struct {
    int clntSocket;
    string fileName;
    int tagNumber;
    int timestamp;
    int chunks;
} TransferFileArgs;

typedef struct {
    int clntSocket;
    vector<string>fileNames;
    vector<int>versions;
} ReplyTransferFilesArgs;

typedef struct {
    string fileName;
    int tagNumber;
    int timestamp;
} NewModifiedArgs;

typedef struct {
    string fileName;
    int timestamp;
} DeleteFileArgs;

typedef struct {
    string fileName;
    int tagNumber;
} RequestUpdateArgs;

// [*] create real constructor that takes in type? and args?
class Job {
public:
    enum JobType { REPLYSTATUS, QUERYSTATUS, EXITLISTENER, EXITWORKER, REPLYVFS, TRANSFERFILE, NAK, REPLYTRANSFERFILES, NEWMODIFIED, DELETEFILE } ;

    Job();
    ~Job();
  
    JobType type;
    void *args;
};

#endif

